package com.baidu.control;

// OcrControl  文字识别控制器
// 功能：1.拦截前端请求及提交数据，解析数据 2.返回数据到前端

import com.baidu.service.AipOcrService;
import com.baidu.utils.FileUtil;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

// 如何把class创建Java的servlet应用程序？
// 1.继承 HttpServlet
// 2.重写结构 doGet\doPost
// 3.声明url地址：没有地址无法实现前后端数据交互 1.web.xml手动配置 2.@WebServlet('/url')
// 4.初始化请求函数

// 需要把web-inf下方的lib导入当前项目的依赖，右键add as lib.....

@WebServlet("/ocr_control")
public class OcrControl extends HttpServlet {

    @Override // 重写
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp); // 把get请求转发到post处理
    }

    // HttpServletRequest 请求对象 接收请求动作，并保存、解析数据
    // HttpServletResponse 响应对象 做出响应动作，返回数据
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 编码属性初始化
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        // 输出对象：可以把数据输出到前端展示
        PrintWriter printWriter = resp.getWriter();
        // 参数结构 name:value 字典
        // 获取参数，用于动作判断
        String action = req.getParameter("action");

        if (action.equals("textDetect")){
            // req存储文本数据和file文件数据，解析获取file，file需io流读取字节流
            byte[] file_byte = FileUtil.readRequestAsByte(req);
            // 返回结果：string类型json数据
            printWriter.write(AipOcrService.getAipOcrService().textDetect(file_byte));
        }

        if (action.equals("idcard")){
            // 获取图片字节流数组
            byte[] file_byte = FileUtil.readRequestAsByte(req);
            // 返回结果：string类型json数据
            printWriter.write(AipOcrService.getAipOcrService().idCard(file_byte));
        }

        printWriter.flush();
        printWriter.close();
    }
}
